
from django import forms
from utils.BootStrapForm import BootStrapForm
from web import models

class IssuesModelForm(BootStrapForm,forms.ModelForm):
    class Meta:
        model = models.Issues
        exclude = ['project','creator','create_datetime','latest_update_datetime']

        # 添加字段的属性，应用select插件
        widgets = {
            "assign":forms.Select(attrs={'class':'selectpicker','data-live-search':'true'}),
            "attention":forms.SelectMultiple(attrs={
                'class':'selectpicker',  # 使用select样式
                'data-live-search':'true', # 使用搜索框
                'data-actions-box':'true', # 使用多选框
            }),
            "parent": forms.Select(attrs={'class': 'selectpicker', 'data-live-search': 'true'}),
        }
    # 处理初始化的数据
    def __init__(self,request,*args,**kwargs):
        super().__init__(*args,**kwargs)
        # 所有的数据都是当前项目的，不能显示别的项目的数据。如果不这样写的话就默认显示全部的数据
        # 利用choices属性，只显示当前项目的问题类型。values_list('id','title')数据类型为：[(1,'xx'),(2,'xx')]
        self.fields['issues_type'].choices = (models.IssuesType.objects.
                                              filter(project=request.tracer.project).values_list('id','title'))
        # 获取当前项目的所有模块，手动书写并利用extend来把未选择添加在最上面
        module_list = [('','未选择'),]
        module_object = models.Module.objects.filter(project=request.tracer.project).values_list('id','title')
        module_list.extend(module_object) # 把未选择 添加在列表的最前面
        self.fields['module'].choices = module_list

        # 指派着和关注者。首先要在数据库中找到项目的创建者和参与者
        # 首先添加上项目的创建者id和创建者名字。creator_id是数据库中保存的外键，project.creator.username是跨表查询userinfo中的username
        total_user_list = [(request.tracer.project.creator_id,request.tracer.project.creator.username),]
        # 获取项目的参与者。user__username也是跨表查询：跨越到userinfo表中，查找username
        project_user_list = models.ProjectUser.objects.filter(project=request.tracer.project).values_list('user_id','user__username')
        total_user_list.extend(project_user_list)
        # 如果也想在指派这里添加个空值，就可以直接写个列表相加即可。相加跟用extend合并两个列表是一样的
        self.fields['assign'].choices = [('','未选择')] + total_user_list
        self.fields['attention'].choices = total_user_list

        # 当前项目已创建的问题。严谨的写法就是用extend
        parent_list = [('', '未选择')]
        parent_object_list = models.Issues.objects.filter(project=request.tracer.project).values_list('id','subject')
        parent_list.extend(parent_object_list)
        self.fields['parent'].choices = parent_list


class IssuesReplyModelForm(forms.ModelForm):
    class Meta:
        model = models.IssuesReply
        fields = ['content','reply']

# 邀请者的ModelForm
class InviteModelForm(BootStrapForm,forms.ModelForm):
    class Meta:
        model = models.ProjectInvite
        fields = ['period','count']















